package com.sq.gulimall.seckill.scheduled;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * 1. @EnableScheduling : 开启定时任务
 * 2. @Scheduled : 开启一个定时任务
 *
 * 异步任务：
 *   1. @EnableAsync : 开异异步任务功能
 *   2. @Async : 给希望异步执行的方法上标注
 */
@Slf4j
//@EnableAsync
@Component
//@EnableScheduling
public class HelloSchedule {

    /**
     * 1. Spring中6位组成，不允许第七位的年
     * 2. 在周几的位置，1-7代表周一到周日，MON-SUN
     * 3.定时任务不应该阻塞，默认是阻塞的。
     *    a. 可以让业务运行以异步的方式，自己提交到线程池
     *       CompletableFuture.runAsync(()->{
     *             xxxService.hello();
     *         },executor);
     *    b. 支持定时任务线程池 设置 TaskSchedulingProperties
     *      spring.task.scheduling.pool.size=5 (不太好使)
     *    c. 让定时任务异步执行
     *
     *
     */
    @Async
    @Scheduled(cron = "* * * ? * 2")
    public void hello() throws InterruptedException {
//        log.info("hello.....");
//        Thread.sleep(3000);
    }
}
